// requet.js
import { utils } from '@/utils/utils.js';
export const baseUrl = 'https://api.juhuimengtg.com';
// 获取token
export function getToken() {
    const storageData = uni.getStorageSync('token');
    if (storageData) {
        // const { token } = JSON.parse(storageData);
        const token = storageData;
        return token; // 返回 token
    }
    return ''; // 如果没有找到数据，返回 null 或其他合适的值
}
export const request = (options) => {
    return new Promise((resolve, reject) => {
        // 设置请求头
        const header = {
            'content-type': options.isJson ? 'application/json' : 'application/x-www-form-urlencoded',
            token: getToken(),
            ...options.header // 可以传入额外的请求头参数
        };
        uni.showLoading({
            title: '加载中',
            mask: true
        });
        uni.request({
            url: baseUrl + options.url, //接口地址：前缀+方法中传入的地址
            method: options.method || 'POST', //请求方法：传入的方法或者默认是“POST”
            data: options.data || {}, //传递参数：传入的参数或者默认传递空集合
            header: header, //接收请求的header
            success: async (res) => {
                uni.hideLoading();
                if (res.data.code == '401') {
                    await uni.navigateTo({
                        url: '/pages/login/login'
                    });
                    return utils('登录过期，请重新登录');
                }
                resolve(res.data, '成功');
            },
            // 这里的接口请求，如果出现问题就输出接口请求失败
            fail: (err) => {
                uni.hideLoading();
                reject(err);
            }
        });
    });
};
// 上传单张图片
export const uploadFile = () => {
    return new Promise((resolve, reject) => {
        uni.chooseImage({
            count: 1,
            sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图，默认二者都有
            sourceType: ['album'], // 从相册选择
            success: function (res) {
                uni.showLoading({
                    title: '上传中',
                    mask: true
                });
                uni.uploadFile({
                    url: baseUrl + '/common/upload', // 仅为示例，非真实的接口地址
                    filePath: res.tempFilePaths[0],
                    name: 'file',
                    header: {
                        token: getToken()
                    },
                    success: (uploadFileRes) => {
                        const responseData = JSON.parse(uploadFileRes.data);
                        uni.hideLoading();
                        utils('上传成功！');
                        resolve(responseData); // 解析后的数据作为Promise的解决值
                    },
                    fail() {
                        uni.hideLoading();
                        utils('上传失败！');
                        reject('上传失败'); // 以错误消息作为Promise的拒绝原因
                    }
                });
            },
            fail() {
                uni.hideLoading();
                utils('选择图片失败！');
                reject('选择图片失败'); // 以错误消息作为Promise的拒绝原因
            }
        });
    });
};
// 上传多张图片
export const uploadFiles = () => {
    return new Promise((resolve, reject) => {
        let uploadedPaths = []; // 用于存储上传成功的图片路径

        uni.chooseImage({
            count: 9, // 允许选择的最大图片数量，可以根据需要调整
            sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图，默认二者都有
            sourceType: ['album'], // 从相册选择
            success: function (res) {
                const tempFilePaths = res.tempFilePaths; //选中图片后的数组
                // console.log(888, tempFilePaths);
                let uploadPromises = tempFilePaths.map((filePath, index) => {
                    return new Promise((innerResolve, innerReject) => {
                        uni.showLoading({
                            title: `正在上传第${index + 1}张`,
                            mask: true
                        });
                        uni.uploadFile({
                            url: baseUrl + '/common/upload', // 仅为示例，非真实的接口地址
                            filePath: filePath,
                            name: 'file',
                            header: {
                                token: getToken()
                            },
                            success: (uploadFileRes) => {
                                const responseData = JSON.parse(uploadFileRes.data);
                                // console.log(9999, responseData);
                                // 假设返回的数据中包含图片的路径，这里需要根据实际情况调整
                                const uploadedPath = responseData.data; // 假设返回的数据中有一个字段是图片的路径
                                uploadedPaths.unshift(uploadedPath); //把上传成功后的路径推到数组里边
                                innerResolve();
                                // 如果选中图片的数组和上传的数组长度一样证明上传成功
                                if (uploadedPaths.length === tempFilePaths.length) {
                                    uni.hideLoading();
                                    utils('所有图片上传成功！');
                                    resolve(uploadedPaths); // 所有图片上传完成后，解析后的路径数组作为Promise的解决值
                                }
                            },
                            fail() {
                                uni.hideLoading();
                                uploadedPaths.push(null); // 标记上传失败的位置，或者可以选择其他方式处理失败
                                innerReject(`第${index + 1}张图片上传失败`);
                                // 如果有一张图片上传失败，可以选择立即拒绝Promise，或者继续尝试上传其他图片
                                // 如果选择继续上传，可以在所有图片都尝试上传后，根据uploadedPaths中的null值来处理失败的上传
                                if (uploadedPaths.length === tempFilePaths.length) {
                                    const failedIndices = uploadedPaths.map((path, index) => (path === null ? index + 1 : null)).filter((index) => index !== null);
                                    utils(`上传完成，但有${failedIndices.length}张图片失败：${failedIndices.join(', ')}`);
                                    reject(`上传完成，但有部分图片失败：${failedIndices.join(', ')}`);
                                }
                            }
                        });
                    });
                });

                // 使用Promise.all来等待所有图片上传完成
                Promise.all(uploadPromises)
                    .then(() => {
                        // 所有图片上传的Promise都已完成（无论成功还是失败）
                        // 具体的成功或失败处理已经在uploadPromises的回调中完成
                        uni.hideLoading();
                        console.log('所有图片上传的Promise都已完成（无论成功还是失败）');
                    })
                    .catch((error) => {
                        // 这里的catch实际上不会被触发，因为我们在uploadPromises的回调中已经处理了失败情况
                        // 但保留这个catch可以用于捕获其他未预料的错误
                        reject('上传过程中发生未预料的错误：' + error);
                    });
            },
            fail() {
                utils('选择图片失败！');
                reject('选择图片失败');
            }
        });
    });
};
